/* 
 * File:   GenericRow.h
 * Author: lusitanio
 *
 * Created on 12 de Março de 2012, 19:47
 */

#ifndef GENERICROW_H
#define	GENERICROW_H

class GenericRow {
private:
    int posicao;
    float inicio;
    float fim;
    int responsavel;
    int ocorrencias;
    int type;

public:

    enum RowType {
        SA,
        HISTO
    };

    GenericRow(int posicao = NULL, float inicio = NULL, float fim = NULL) {
        this->posicao = posicao;
        this->inicio = inicio;
        this->fim = fim;
        this->responsavel = NULL;
        this->ocorrencias = 0;
    }

    GenericRow(int posicao, float inicio, float fim, int responsavel) {
        this->posicao = posicao;
        this->inicio = inicio;
        this->fim = fim;
        this->responsavel = responsavel;
        this->ocorrencias = 0;
        this->type = RowType(SA);
    }

    GenericRow(const GenericRow& data) {
        this->posicao = data.GetPosicao();
        this->inicio = data.GetInicio();
        this->fim = data.GetFim();
        this->responsavel = data.GetResponsavel();
        this->ocorrencias = data.GetOcorrencias();
        this->type = data.type;
    }
    
    void SetHistoType(){
        type = RowType(HISTO);
    }
    
    void SetSaType(){
        type = RowType(SA);
    }    

    int GetOcorrencias() const {
        return ocorrencias;
    }

    void IncOcorrencias() {
        this->ocorrencias++;
    }

    void SetOcorrencias(int ocorrencias) {
        this->ocorrencias = ocorrencias;
    }

    float GetFim() const {
        return fim;
    }

    void SetFim(float fim) {
        this->fim = fim;
    }

    float GetInicio() const {
        return inicio;
    }

    void SetInicio(float inicio) {
        this->inicio = inicio;
    }

    int GetResponsavel() const {
        return responsavel;
    }

    void SetResponsavel(int responsavel) {
        this->responsavel = responsavel;
    }

    int GetPosicao() const {
        return posicao;
    }

    void SetPosicao(int posicao) {
        this->posicao = posicao;
    }

    bool checkRange(float value) {
        if (posicao == 0)
            return ((value >= inicio) && (value <= fim));
        else
            return ((value > inicio) && (value <= fim));
    }

    void print() {
        if (this->type == RowType(HISTO))
            printf("HistRow[%2d][%7.2f|%7.2f] -> %4d\n", posicao, inicio, fim, ocorrencias);
        else
            printf("SARow[%2d][%7.2f|%7.2f] -> %4d\n", posicao, inicio, fim, responsavel);
    }



};



#endif	/* GenericRow_H */

